<?php
/**
 * Created by PhpStorm.
 * Title：
 * User: zhanglangeba
 * Date: 2022/4/28
 * Time: 10:38
 */

/**
 * 公共 日志打印
 * @User zhanglangeba
 * @param        $level
 * @param string $message
 * @param array  $context
 * @param string $channel
 * @param int    $limit
 * @return mixed
 */
function YjLog($level, string $message, array $context = array(), $channel = 'daily', $limit = 3)
{
    return \Illuminate\Support\Facades\Log::channel($channel)->$level(print_message_class($limit) . $message, $context);
}

/**
 * mq 日志打印
 * @User zhanglangeba
 * @param string $message
 * @param array  $context
 * @param string $level
 * @param string $channel
 * @param int    $limit
 * @return mixed
 */
function mqLog(string $message, array $context = array(), $level = 'debug', $channel = 'rabbitmq', $limit = 4)
{
    return YjLog($level, $message, $context, $channel, $limit);
}

/**
 * 系统服务 日志打印
 * @User zhanglangeba
 * @param string $message
 * @param array  $context
 * @param string $level
 * @param string $channel
 * @param int    $limit
 * @return mixed
 */
function serviceLog(string $message, array $context = array(), $level = 'debug', $channel = 'service', $limit = 4)
{
    return YjLog($level, $message, $context, $channel, $limit);
}

/**
 * 队列 日志打印
 * @User zhanglangeba
 * @param string $message
 * @param array  $context
 * @param string $level
 * @param string $channel
 * @param int    $limit
 * @return mixed
 */
function jobsLog(string $message, array $context = array(), $level = 'debug', $channel = 'jobs', $limit = 4)
{
    return YjLog($level, $message, $context, $channel, $limit);
}

/**
 * 定时任务 日志打印
 * @User zhanglangeba
 * @param        $message
 * @param array  $context
 * @param string $level
 * @param string $channel
 * @return mixed
 */
function crontabLog(string $message, array $context = array(), $level = 'debug', $channel = 'crontab', $limit = 4)
{
    return YjLog($level, $message, $context, $channel, $limit);
}

/**
 * 打印类的标记
 * @User zhanglangeba
 * @param int $limit
 * @return string
 */
function print_message_class($limit = 3)
{
    $backtrace = collect(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, $limit))->last();
    $class_name = $backtrace['class'] ?? '';
    $line = $backtrace['line'] ?? '';
    $func_name = $backtrace['function'] ?? '';
    $message = "{$class_name} ({$line}) {$func_name} ";

    return $message;
}

if (!function_exists('dingMarkdown')) {
    /**
     * 发送 markdown 定制化钉钉消息
     * todo 以下代码格式为定制化，切勿随意改动格式
     * 使用该方法必须先安装  composer require wangju/ding-notice 扩展包
     * 由于消息发送太频繁会严重影响群成员的使用体验，因此钉钉开放平台对自定义机器人发送消息的频率作出以下限制：
     * 每个机器人每分钟最多发送20条消息到群里，如果超过20条，会限流10分钟。
     * @User zhanglangeba
     * @param       $title
     * @param array $content
     * @return mixed
     */
    function dingMarkdown(string $title, $content, $config = 'default')
    {
        $text = '## ' . $title . '
>';
        // 字符串转数组
        if (!is_array($content)) {
            $content = compact('content');
        }

        foreach ($content as $k => $v) {
            $text .= '**' . $k . '**' . ':' . json_encode($v, JSON_UNESCAPED_UNICODE) . '\
';
        }
        return ding()->with($config)->markdown($title, $text);
    }
}
